Repository navigation
chore(deps): update dependency jdx/mise to v2026 - #220
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
July 30, 2026 03:03
b069281 to
4210d96
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
August 5, 2026 03:26
7255dd3 to
18a73a9
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
3 times, most recently
from
August 12, 2026 20:16
2752ba1 to
661a5bf
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
August 20, 2026 23:10
6445a85 to
c5325ef
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
August 26, 2026 03:48
9dd559c to
fac6f2e
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
September 3, 2026 00:28
61548e9 to
844f10e
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
September 11, 2026 04:03
b504efd to
25c7628
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
September 20, 2026 15:11
e80a868 to
39250db
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
September 30, 2026 23:27
592af37 to
fb21bcb
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
October 9, 2026 02:53
f1ad039 to
6922c36
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
6 times, most recently
from
October 15, 2026 12:37
0aa2b64 to
c858e85
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
4 times, most recently
from
October 19, 2026 12:03
1cf93e0 to
a4d5400
Compare
renovate
Bot
force-pushed
the
renovate/jdx-mise-2026.x
branch
from
October 21, 2026 03:26
a4d5400 to
8ad2c61
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
Test plan: CI should pass with updated dependencies. No review required: this is an automated dependency update PR.
Release Notes
jdx/mise
v2026.10.17: : Shell names in bootstrap login_shell, templated doctor checks, and a per-plugin vfox cache directoryCompare Source
bootstrap.user.login_shellnow accepts a shell name such asfishinstead of a full path.[doctor.checks]can use templates, and vfox backend plugins get their own cache directory. This release also fixes PATH handling in zsh setups that deduplicate PATH, stale task cache hits, a pipx interpreter mix-up on macOS, and removes trust in the compromised eMudhra CA certificates.It also includes the changes prepared for 2026.10.16, which was tagged but never published: relative and templated
write_targetspaths, version aliases from vfox backend plugins, keyring passwords for private PyPI indexes,vfox-backend:packslip plugin sources, and a change to wherefind_upstarts (see Changed and Upgrading).Added
[bootstrap.user].login_shellaccepts a shell name. A config shared across machines no longer needs to know where each system installs the shell. mise looks up the name when it checks or applies the setting, which happens afterbootstrap.packageshas installed the shell. It searchesPATHfirst (never the mise shims directory), then common package-manager locations:/opt/homebrew/bin,/usr/local/bin,/home/linuxbrew/.linuxbrew/bin,~/.linuxbrew/bin,/usr/binand/bin. If no executable is found,mise bootstrap user applyfails without changing/etc/shellsor the account, andstatusreportsnot installed.mise bootstrap user statusshows the path it found, and--jsonoutput has a newresolvedfield. Absolute paths work as before. #14770 (@jdx)Doctor checks support templates.
run,descriptionandhintin[doctor.checks.*]are rendered with the template context of the config file that declares them, the same way hooks are. A check can now use a value from[vars]instead of hard-coding it.diris not rendered. If a template fails, only that check reportsERRORand the other checks still run. Text that already contains{{or{%in these fields is now parsed as a template. #14771 (@jdx)vfox plugins get
RUNTIME.cacheDirPath. This is a cache directory for each plugin at$MISE_CACHE_DIR/plugins/<plugin-name>. mise creates it before running any hook, and every hook of the plugin sees the same path. UnlikepluginDirPath, it is kept when the plugin is reinstalled.mise cache cleardeletes it, so plugins must handle it being missing. It isnilwhen no cache directory is available. #14776 (@jdx)settings.write_targetsaccepts relative and templated paths. Before, only absolute or~/paths worked, so dotfiles shared between machines with differentMISE_CONFIG_DIRorXDG_CONFIG_HOMEhad to hardcode the config directory. Templates are now rendered, and a relative result is joined to theconfig_rootof the settings file that declares it. For a global file that is$HOME, so the portable spelling uses the file's own directory. The resolved path must still be a global config file that mise loads. If a template fails to render, mise warns, andmise use --globalfails with "must resolve to an absolute path" instead of writing to the default file. #14742 (@jdx)vfox backend plugins can report version aliases.
BackendListVersionscan return analiasestable, so a registry's moving names resolve to real versions. Before,"mise-ghcup:ghc" = "recommended"passed the literal string to the plugin, installed intoinstalls/.../recommended, never followed the tag when it moved, and showedrecommendedinmise lsand the lockfile. Nowghc@recommendedresolves to9.10.3, installs into9.10.3/, and the lockfile records9.10.3. Aliases you define in config still win. They are cached like the version list, and an expired cache still answers offline. Older mise versions ignore thealiasesfield, so plugins can adopt it right away. #14732 (@jdx, @cprecioso)mise lockand version listing work with a PyPI index that uses a keyring. With an index such as Azure Artifacts andartifacts-keyring,mise installworked because uv read the password from its keyring provider, but mise's own requests sent no credentials and failed with401 Unauthorized. Set the newpypi.keyring_provider(disabledby default, orsubprocess; env varMISE_PYPI_KEYRING_PROVIDER) and give the registry URL a username without a password. mise then runskeyring get <url> <username>, as uv does, and sends the result as HTTP Basic credentials when it lists versions and whenmise lockreads a release'srequires-python. The password is never written to the lockfile or the version cache. Thekeyringexecutable must be onPATH. If it is missing or has no entry, mise sends the request without credentials. #14733 (@jdx)vfox-backend:works as a prefix for packslip plugin sources. A vfox backend plugin can be installed from a signed packslip archive, both from the CLI and in[plugins]. Before,mise plugins install vfox-backend:foo 'packslip:owner/repo#1.0.0'failed withpackslip plugin sources require the vfox plugin type. An explicitasdf:orpackage:prefix is still rejected, and the error now says "vfox or vfox-backend". The archive still declaresextensions.mise.plugin = "vfox". #14727 (@jdx)mise plugins install vfox-backend:my-backend 'packslip:your-org/my-backend#1.0.0'mise bootstrap packages listis now an alias forstatus, alongsidels. #14709 (@himkt)Changed
find_upinenv._.filestarts at the config root. Every other relative path in a config resolves against the config root, butfind_upstarted at the current directory. A relativefind_uppath now starts at the config root and walks up through its parents, which suits a monorepo whose root.envapplies to every package. An absolute path starts at its own directory. A global config that wants to search from wherever mise runs can usecwd. Theenv_filesetting still discovers dotenv files up from the current directory and is unchanged. See Upgrading. #14734 (@jdx, @thernstig)allow_buildsapproves only the packages it lists. With the embedded aube installer,allow_builds = ["re2"]also ran the install scripts of every package on aube's bundled trusted-dependencies list, such asdtrace-provider. For a package list, mise now turns that default list off, so only the packages you name build.allow_builds = trueand the default with no option are unchanged. This updates the embedded aube to 2.8.0. #14731 (@jdx)Fixed
exec()in[env]values, and other commands mise runs with the pre-activation environment, can now find commands in a_.pathdirectory that was already onPATHbefore activation, even if the shell deduplicatesPATH(for example zsh withtypeset -U path PATH). #14772 (@jdx)task.source_freshness_hash_contents = true, a task now re-runs when a source file is changed to content of the same size and its old mtime is restored (for example byrsync -a,cp -portouch -r). On Unix, mise now also compares the file's ctime. Cache entries written by older versions are rehashed once. #14778 (@jdx)pipx:installs no longer fail whenaqua:aws/aws-cliis in the toolset. Because macOS filesystems ignore case by default, mise's lookup forpythonmatched aws-cli's executablePythonshared library and passed it to uv as the interpreter. This lookup now requires the exact case. #14769 (@jdx)webpki-root-certs1.0.10,rustls-webpki0.103.16). Builds that use the OS trust store are fixed by OS updates instead. #14781 (@jdx)[bootstrap.compose]project no longer reports drift on every run when a service uses aservice:reference such asnetwork_mode: service:vpn. Compose hashes the reference as written but stamps the container with the hash of the resolvedcontainer:<id>, so the two never matched. mise now pins these references (network_mode,ipc,pid,volumes_from) to the running container before it asks compose for the hash. This needs an explicitfileslist in the project's config. Projects without one hash as before. #14729 (@jdx).ziparchives returned byPreInstall. Before, entries such asbin/npm -> ../lib/node_modules/npm/bin/npm-cli.jsbecame regular files holding the link target, and the tool failed withNo such file or directory. Links that resolve outside the install directory are still rejected. Thehttp:backend and tarballs were not affected. #14730 (@jdx)[daemons.<name>] task = "worker"now finds a file task such as.mise/tasks/worker.sh, asmise run workerdoes. Before, it failed withdaemon srv runs unknown task "worker"unless you wroteworker.sh. #14741 (@jdx)mise self-updateno longer replaces the wingetmise-shim.exelink with a copy. It updates the realmise-shim.exenext to the realmise.exe. Before,mise reshimkept warning that the shim was older than mise. #14737 (@jdx)[dotfiles]entry turned off with onlyenabled = falseno longer printsno recognized operation (block, source, or line), ignoring entryon every command. Other tables with no recognized operation, such as a misspelledline, still warn. #14726 (@jdx, @ponko2)Upgrading
find_upin a global config: a relativefind_upentry inenv._.fileused to search from the current directory. It now searches from the config root, which is~for a global config, so it no longer finds project files. To keep the old behavior, put{{cwd}}/in front of the path.find_upwas added in 2026.10.12.Documentation
permissionsdoes not inherit the group'smode, so it deploys nothing. Removingmodefrom an entry that used to deploy a file leaves that file orphaned, and--prunedeletes it. To deploy a file and set its permissions, use{ mode = "copy", permissions = "0600" }. #14768 (@jdx)New Contributors
Full Changelog: jdx/mise@v2026.10.15...v2026.10.17
💚 Sponsor mise
mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.
v2026.10.15: : Default minimum_release_age covers every backend, plus a PowerShell installerCompare Source
The default 24-hour
minimum_release_agenow applies to every backend. Many more backends report release dates, so the cooldown can actually hold new versions back, and mise warns when it installs a version it couldn't date. This release also adds a PowerShell installer for Windows,read_json/read_yaml/read_tomltemplate functions,dotnet@lts/dotnet@sts, and new dotfiles options.Changed
The default
minimum_release_ageapplies to every backend. The built-in 24h cooldown used to cover only backends that reported release dates (aqua, cargo, core, github, npm, pypi and others). asdf, vfox, conda, dotnet,http:ands3:tools had no cutoff at all. Now every backend gets the cooldown. A tool whose only version is less than 24h old now resolves to "no versions found", as aqua and github tools already did. To opt a tool out, add it tominimum_release_age_excludes. To turn the cooldown off, setminimum_release_age = "0s". #14701 (@jdx)mise warns when it can't check a version's release date. A version with no known date still passes the cutoff, but
mise install,mise upgradeandmise usenow print a one-time warning naming the version. Exact pins you wrote yourself don't trigger it.mise env,mise ls,mise outdatedandmise ls-remotenever print it. #14694 (@jdx)More backends report release dates, so the cooldown applies to them:
version_source: github_tag, such asaws/aws-cli,docker/cliandcockroachdb/cockroach) are now dated. #14691stable,betaandnightlychannels are dated too. With an explicit past cutoff,rust@stableresolves to the newest stable release that is old enough, andbeta/nightlyresolve to a dated build from before the cutoff. #14697All by @jdx.
Version lists for more backends come from the mise-versions host.
npm:,pipx:,cargo:,gem:,go:,dotnet:andspm:tools now list versions from mise-versions, like other registry tools, instead of going to their own source. So do http/s3 tools with aversion_list_url. If you redirect a source, mise still lists from that source directly. That covers a custom npm registry ornpm.shell_out,pypi.registry_url, a non-defaultGOPROXY,cargo.registry_name, a custom gem source,dotnet.registry_url, S3 endpoint overrides, and local listing options. conda always lists from its channel. The host cache TTL now follows the tool'sminimum_release_age. To list everything from the source, setMISE_USE_VERSIONS_HOST=0. #14700 (@jdx)Added
PowerShell installer for Windows. It's published with each release as
install.ps1and served from mise.run at/powershelland/pwsh, so you pipe it intoiexwithirm. It works on PowerShell 5.1+ and doesn't need admin rights. It installs the newest release that is at least 24h old, orMISE_VERSIONif set. The download is verified againstSHASUMS256.txtfrom GitHub Releases.mise.exeandmise-shim.exego into~\.local\bin, and that directory is added to your userPath. Re-running it upgrades an existing install. Options includeMISE_INSTALL_PATH,MISE_INSTALL_MODIFY_PATH=0,MISE_INSTALL_SHIMS_PATH=1andMISE_INSTALL_FROM_GITHUB=1. See the "Installing mise" docs for the full command. #14660 (@jdx, @lhs-12)read_json(),read_yaml()andread_toml()template functions parse a file so a template can use a value from it. This saves copying a version frompackage.jsonorPulumi.yamlintomise.tomlby hand. Relative paths resolve from the config file's directory. A missing key is an error unless you add| default(value="..."). Likeread_file(), these functions need a trusted config, and they don't work in safe mode,.miserc.tomlor OCI dotfile templates. #14705 (@jdx, @edahlseng)dotnet@ltsanddotnet@stsresolve to the newest SDK in the current LTS or STS channel, using Microsoft's release index. Preview, go-live and end-of-life channels are skipped. Altsalias you define in[tool_alias.dotnet.versions]still takes precedence. Runtime-only installs still need an exact version. #14683 (@jdx)mise bootstrap --prune-dotfilesremoves dotfiles that are no longer deployed, the same waymise dot apply --prunedoes, somise bootstrap --upgrade --prune-dotfileshandles everything in one run. The prune runs at the end of the dotfiles phase. It respects--dry-run,--yesand--skip dotfiles. Copies you edited are left in place. #14681 (@jdx, @thernstig)dotfiles.windows_symlinks(defaultfalse) makessymlinkandsymlink-eachcreate real file symlinks on Windows. With it on, apply fails if Windows refuses to create a link, instead of silently copying. To create symlinks, Windows needs Developer Mode or an elevated shell. If you turn the setting back off,mise dot unapplyneeds--forceon entries that still hold links. #14682 (@jdx)http:tools can report release dates with the newversion_date_exproption. It maps versions to dates from theversion_list_urlresponse. Useversion_date_urlto read the dates from a different URL, andversion_date_next_exprto follow paged listings (same host only). Dates can be RFC 3339,YYYY-MM-DDor HTTP dates. #14696 (@jdx)vfox plugins can report release dates. An
AvailableorBackendListVersionshook can returncreated_at(RFC 3339) for each version. Plain version strings still work. #14695 (@jdx)mise tasks -ais a short alias formise tasks --all. #14674 (@williamsjokvist)Fixed
mise fmtno longer breaks multiline inline tables (TOML 1.1). It used to pull comments out of the table and drop indentation. Now it leaves these tables exactly as written. #14670 (@jdx, @ponko2)dirtemplate fails to render, other task commands keep working. Before, every command failed, includingmise tasks validate. Nowmise tasks validatereports the broken task asinvalid-directory-template, and only running that task fails. #14680 (@jdx)allow_buildsnow run even when~/.npmrcsetsignore-scripts=true. #14661 (@jdx)mise lockno longer fails when your aube config sets a different default lockfile, such aspnpm-lock.yaml. #14659 (@jdx).7ztool archives now extract when mise's data directory path contains.., for example in a localized mise setup. #14657 (@jdx, @sevenc-nanashi)mise-shim.exein the Windows release now keeps its version tag, somise doctorandmise reshim --forcestop reporting it as outdated. The warning goes away after you update and runmise reshim --force. #14656 (@jdx)symlink-eachdotfiles messages and dry-run previews now say the files were copied rather than symlinked. #14654 (@jdx, @lhs-12)RUSTUP_DIST_SERVERmirror configured and GitHub unreachable, mise now lists thestable,betaandnightlychannels instead of failing, sorust@stableinstalls through the mirror. #14662 (@jdx)http:installs of large archives no longer fail with "Access is denied" while antivirus is scanning the extracted files. mise now retries the final move for up to about a minute. #14703 (@jdx)Documentation
mise.tomlexample in the docs now shows hover help on its keys. #14673, #14686 (@jdx)mise config explain. #14687, #14690, #14688 (@jdx)Full Changelog: jdx/mise@v2026.10.14...v2026.10.15
💚 Sponsor mise
mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.
v2026.10.14: : Global override config, mise config explain, and stricter tool option checksCompare Source
A global
config.override.tomlcan now take precedence over project config, andmise config explaindescribes each key in a config file. Paranoid mode can be turned on per category, and in that mode dotenv files need their own content-bound trust. Installs now fail when a tool has an option its backend doesn't read, which affects existing configs (see Changed).Added
Global override files.
~/.config/mise/config.override.toml, andconfig.<env>.override.tomlfor eachMISE_ENV, rank above every project file, includingmise.local.tomlandmise.<env>.toml. This covers[env],[tools],[settings],[tasks], hooks and the other sections. Anything the override file doesn't set still comes from the project. mise never writes to these files by default. To write to one, pass--overridetouse,unuse,set,unset,settings set|add|unsetorconfig get|set. A tool declared in an override file resolves from the globalmise.lockand is exempt from the project's--lockedcheck. IfMISE_GLOBAL_CONFIG_FILEis set, override files are not loaded.mise config lsshows aTiercolumn andmise doctorlabels the files. #14610 (@jdx)mise config explain [KEY]lists each key a config file sets, with its line number and its description from the schema. It flags unknown keys with a "did you mean" suggestion and marks deprecated keys. It reads the file as plain TOML, so it also works on a config mise refuses to load. Pass a key such astasksto show only that section,--jsonfor machine-readable output, and--file,--global,--systemor--overrideto pick a file. #14642 (@jdx)Paranoid mode can be turned on per category.
paranoidnow accepts a list ofconfig,env_files,pluginsandprovenancein addition totrue/false.MISE_PARANOID=config,env_filesalso works.truestill turns on all four categories. An unknown category name is an error. #14609 (@jdx, @thernstig)env_filetakes several filenames, for exampleenv_file = [".env", ".env.local"]orMISE_ENV_FILE=.env:.env.local. The file nearest the current directory wins. Within one directory, a name later in the list wins. A single string still works. #14606 (@jdx, @thernstig)A
find_upentry inenv._.filecan search several names together. Give one entry apathlist, and mise searches directory by directory. The closest directory wins, then the later name within a directory. With two separate entries, a.env.localin a parent directory still overrides the project's.env. The docs now explain this difference and howenv_filediffers from_.file. #14620, #14602 (@jdx)#MISEheaders in file tasks accept the same keys as[tasks.<name>], includingtimeout,varsand thedeny_*/allow_*sandbox keys. Before, these keys were ignored with a warning. If one header value is invalid, mise warns and skips that key, and every other task still loads. An invalidconfirmordeny_*value is still an error, so a typo can't remove a confirmation prompt or a sandbox restriction. Before, a template named withextendsoverrode a header'ssilent. Now the header's value wins. #14637 (@jdx)Interactive
mise.tomlreference in the docs at configuration/reference. It lists every key with its type, choices and default, and you can filter keys and link to them directly. Plain Markdown copies are also published for agents. #14641 (@jdx)Changed
cargo:eza: option 'asset_pattern' is not used by the cargo backend. Keys underplatformsare checked too. So far this applies to the cargo, conda, gem, github, gitlab, forgejo, go, http, npm, packslip, pipx, s3, spinel, spm and ubi backends. aqua, plugin and core-language tools are not checked. The npm backend accepts thechecksumoption that comes from apackageManagerfield inpackage.json. #14629, #14655 (@jdx)_.file, found by theenv_filesetting, or run by_.sourceeach need their own trust. Editing one of these files revokes its trust. Before, trustingmise.tomlalso approved these files, and later edits went unchecked. Runningmise trustwith no path trusts the project's config and every env file it loads. The error names the file but prints none of its values. To exempt a file by path, add it totrusted_config_pathsin your global config. With a category list, this check belongs toenv_files. #14604 (@jdx, @thernstig)mise.tomlkey now gives the line and column, and suggests a close match, for examplemise.toml:5:1: settings.experimantal (did you mean experimental?). #14639 (@jdx)run/dependsentry or an[env]variable now says which forms are accepted, or names the unknown key. Before, the error wasdata did not match any variant of untagged enum. An unknown key in arunordependstable now gets a warning. Before, it was silently ignored. #14640 (@jdx)[bootstrap.linux.firewall]is validated on every OS. macOS and Windows still skip the section at bootstrap time, but an invalid value such asbackend = "iptables"is now an error there too. #14615 (@jdx)[bootstrap]tables and in[dotfiles]entries. The schema now documents launchdkeep_alive_on_failureandnice, and dotfileautosaveandenabled. It also accepts valid configs it used to reject: templatedlogin_shell,queue_directoriesandumask, nested macOS defaults values, andtoolson[vars]entries. On Windows,[bootstrap.brew].adoptno longer causes an unknown-field warning. #14616, #14644, #14613 (@jdx)mise dot statusandmise dot syncare faster with many tracked files. They start one git process per tracked file instead of three, which took about 10s down to 4s for 860 files. #14607 (@waynehoover)Fixed
/usr/bin, mise no longer puts that directory ahead of its own tools. Before,mise exec -- nodecould run the system Node. Only the Rust proxies are now exposed, through a directory that mise owns. #14597 (@jdx)rename_exe. Before, it ignored the option and installed the executable under its original name. #14626 (@jdx)pypi:installs through uv now pass the configured mise Python touv sync. Before, mise passed an empty path, so uv could pick another interpreter and fail on--no-buildtools such asyamllint. #14593 (@jdx, @hollow)mise implode. #14594 (@jdx, @thernstig)mise bootstrapnow finds Nix in/nix/var/nix/profiles/default/binwhen apre-packageshook installed it earlier in the same run, sonix:packages install. #14596 (@jdx)MISE_WATCH_FILES_GIT_REWRITTENis no longer set when HEAD stayed on the same commit, for example aftergit checkout -b,git resetorgit branch -m. Before, format-on-edit hooks skipped files you had just edited. #14585 (@JamBalaya56562)config_rootandconfig_source. Relative paths in template functions resolve from the wrapper's config file instead of the current directory. #14628 (@JamBalaya56562)Upgrading
option '...' is not used by the ... backend, remove the option or fix its spelling.mise config explain toolsshows which keys mise doesn't recognize.mise trustin each project to approve its env files. Run it again after editing them. If you only want the env-file check, setparanoid = ["env_files"].[bootstrap.linux.firewall]value, it now fails to load on macOS and Windows too. Correct the value.Full Changelog: jdx/mise@v2026.10.13...v2026.10.14
💚 Sponsor mise
mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.
v2026.10.13: : Untrusted project configs can no longer change settingsCompare Source
mise now ignores
[settings]in a project config until you trust it. This release also adds per-version-range backend options to the registry and template support for command wrappers and[bootstrap.repos]. It fixes several bugs in lockfiles, tasks and multi-version tool options.Security
[settings]from untrusted project configs is ignored. Before, a cloned repo'smise.tomlcould change settings as soon as mise found it, with no trust prompt. That included settings that redirect downloads or feed build commands, such asnode.mirror_url,python.pyenv_repoandruby.precompiled_url. These settings now apply only aftermise trust, like[env],[hooks]and[tools]options already did. Trusted projects, global and system config, environment variables and CLI flags work as before. Commands that trust the active config implicitly (mise run,mise exec,mise install) reload settings after trusting it, so the project's settings still apply to that same command. Settings files are now parsed once per load. #14538, #14553 (@jdx)For example, if an untrusted repo sets
[settings.python] pyenv_repoto its own URL,mise settings get python.pyenv_reporeturns the default pyenv repository until you runmise trust.mise's own
zipdependency moved to 9.x, which fixes GHSA-4684-h2q9-2vcp. Older versions applied Unix permissions through extracted symlinks without checking that the target stayed inside the destination. mise uses this code to extract downloaded.ziptool archives. #14577 (@jdx)Added
One registry backend can carry different options for each version range. A registry entry can list the same backend more than once, each time with its own
min_version/max_versionandoptions. Tools whose release assets changed at some version can then stay on one backend. Two entries can't give the same version different options unless theirplatformsdon't overlap. Table syntax such astool = { version = "1.4.0" }now takes its registry defaults from the entry that version selects. Older mise releases apply only the first entry's options to every version. #14543 (@jdx)mise ls-remotelists every version range of a registry tool. When a tool's backends serve different version ranges, mise now lists each range from the backend that serves it. Before, it listed only the first backend's range. For example,mise ls-remote hknow starts at 0.1.4 instead of 1.58.1. Explicit backends, overrides,--alland--strict-metadatabehave as before. #14544 (@jdx)Command wrapper values render as templates.
command,argsandenvin[wrappers]can usevars,envand the usual template functions.toolsandconfig_rootare not available. A command that renders blank is an error. Use{% raw %}to keep literal braces, such as Docker's{{.Names}}. #14565 (@jdx)[bootstrap.repos]supports templatedurl/refand clone options.urlandrefrender from[vars]or the process environment. Values from a config's[env]table are not available.filter,depthandsubmodules = trueare passed to the firstgit cloneas--filter,--depthand--recurse-submodules. Existing checkouts are left as they are.depthcan't be combined with a commit SHA or arefs/…ref. #14548 (@jdx, @ovidiubuligan){{ system_brew_prefix }}template variable. It resolves to the Homebrew prefix thatmise bootstrapinstalls into:/opt/homebrewon macOS and/home/linuxbrew/.linuxbrewon Linux, or the value ofMISE_SYSTEM_BREW_PREFIX. It does not detect a Homebrew install somewhere else.[bootstrap.user].login_shellnow renders templates too, sologin_shell = "{{ system_brew_prefix }}/bin/zsh"works. #14572, #14570 (@jdx)vfox
PreInstallhooks can return aheaderstable next tourlandsha256. Plugins can now download private or token-gated artifacts through the normal install path, which handles checksums, retries and lockfile URLs. Headers are sent only to the origin ofurl, are dropped on cross-origin redirects, are redacted in debug output and are never written tomise.lock. An explicitAuthorizationheader overrides netrc and the automatic GitHub token. #14531 (@jdx)mise doctorreports a stalemise-shim.exeon Windows. Inwindows_shim_mode = "exe", shims are copies of themise-shim.exethat sits besidemise.exe. If that template is older than mise, or has no version tag (every template built before this release),mise doctorreports it andmise reshimwarns. To fix it, update mise with the package manager that installed it, or runmise self-update, and then runmise reshim --force. #14586 (@jdx)Fixed
mise lockon Windows now recordsrubyentries for Windows, Linux and macOS platforms. Before, it skipped them, andmise install --lockedthen failed. #14520, #14529 (@jdx)mise.lockwithout locking again, such asmise link, no longer delete other platforms' option variants (for example, per-platformasset_patternentries). #14519 (@jdx)mise linkfor one version of a tool no longer makesmise install --lockedfail for that tool's other versions. A link now bypasses the lockfile only when the requested version could select it. #14539 (@jdx)mise install --lockedfor Java no longer fetches the mise-java catalog whenmise.lockalready has the download URL, so locked installs work in air-gapped or proxied environments. #14534 (@jdx)mise runno longer hangs when parallel tasks need to install the same tool. #14536 (@jdx)mise installinside a task no longer removes the shims for that task'slazytools. #14533 (@jdx)postinstall = { task = "setup" }) andwatch_filestask hooks now run with mise even when a tool shim triggered them. Before, they could fail with errors likejq: Unknown option --cd. #14550 (@jdx, @alitas)mise watchexits quietly with status 130 when you interrupt watchexec with Ctrl+C, instead of printing an error. #14541 (@jdx)github:,gitlab:orforgejo:tool lists several versions in config, each version now installs with its own options. Before, an option such asrename_exeset only on the first entry applied to every version. #14537 (@JamBalaya56562)vfox:plugin hooks now receive only the options configured for the version they handle. #14562 (@JamBalaya56562)mise installnow restorescargo,rustcand the host'srust-stdwhen they are missing from a Rust toolchain with theminimalordefaultprofile. Before, mise reported such a toolchain as installed. #14525 (@JamBalaya56562, @risu729)mise trusthint. #14566 (@diogochaves)Registry
xcsift1.7.0 and later installs from signed Packslip releases and now supports Linux x64 as well as macOS ARM64. #14540 (@jdx)protoc-gen-connect-go2.x now installs from the/v2Go module path, and 1.x versions keep working. #14545 (@jdx)rea(npm:rea-agents). #14421 (@phucisstupid)Documentation
experimental = true. #14552 (@ZainnQureshii)New Contributors
Full Changelog: jdx/mise@v2026.10.12...v2026.10.13
💚 Sponsor mise
mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.
v2026.10.12: : Per-tool Python runtimes for PyPI tools, Gradle workspace discovery, and env file find_upCompare Source
PyPI and pipx tools can now choose their own Python runtime, the workspace graph can read Gradle multi-module builds, and
env._.filecan search parent directories. When mise-versions is having an outage, GitHub lookups now retry onapi.github.com, and_.sourcescripts no longer pick up~/.bashrcwhen mise is launched from an editor.Added
Per-tool Python for
pypi:tools. Setpythonto a minor series or an exact version, and mise installs that runtime and passes it to uv or pipx for that tool only. The runtime stays private to the tool and does not become your shell's default Python.mise lockrecords the selected Python with the tool, andmise prunekeeps any runtime that a retained tool environment still uses. You can't combinepythonwith--python/-pinuvx_argsorpipx_args. Tools that don't setpythonbehave as before. #14479 (@jdx)If you change a tool's
python, mise installs a new environment instead of reusing the old one. If that install fails, the previous working environment is left untouched. #14504 (@jdx)Gradle workspace discovery.
mise tasks graphandmise run --affectednow find projects listed byincludeinsettings.gradleorsettings.gradle.kts, using Groovy or Kotlin syntax. Project IDs follow Gradle paths::appbecomesgradle::app, and the root project isgradle::. Literalproject(":lib")references in a project's top-leveldependencies {}block become graph edges. mise reads the scripts as text and never runs Gradle. If anincludeis computed or conditional, aprojectDirisn't a plainfile("...")literal, or both settings files exist, mise reports an error that points to[monorepo.projects."gradle:..."]overrides. Editing the settings script marks every Gradle project as affected. Based on a prototype by @Jarvvski. #14512 (@jdx)find_upforenv._.file. Withfind_up = true, mise looks for a relative path in the current directory and in every parent, so a global config can load each project's.envfiles. Files load from the root down, so values in closer files win. The default isfalse, and the option has no effect on absolute paths. #14497 (@jdx)Detect git-rewritten files in
watch_fileshooks. mise setsMISE_WATCH_FILES_GIT_REWRITTEN=1when every changed file was last written before git's most recent HEAD move (checkout, pull, rebase). Commits don't count as HEAD moves. Hooks such as format-on-edit canConfiguration
📅 Schedule: (in timezone America/Los_Angeles)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.